جزوه · شروع کار با vi (حالت‌ها و دستورات) ← بازگشت به فهرست
📘 فصل اول · قسمت دهم شروع کار با vi (حالت‌ها و دستورات)
📅 تاریخ: ۱۸ مرداد ۱۴۰۵ 👤 مدرس: محمد عابدینی 🐚 Zsh · 🐧 Debian

▍ دو رویکرد در ویرایش با vi

وقتی با vi/vim کار می‌کنیم، دو رویکرد کلی وجود دارد:

۱. رویکرد Auto-save (ذخیره خودکار): برخی کاربران دوست دارند تغییرات به صورت خودکار ذخیره شوند.

۲. رویکرد Manual-save (ذخیره دستی): کاربر تغییرات را دستی با :w ذخیره می‌کند. این روش پیش‌فرض vi/vim است.

رویکرد پیش‌فرض vi/vim، ذخیره دستی است. یعنی شما باید با : + w فایل را ذخیره کنید. اگر بدون ذخیره بخواهید خارج شوید، vi به شما هشدار می‌دهد.

▍ سه حالت اصلی در vi/vim

🟦 ۱. Command Mode (حالت دستور)

این حالت پیش‌فرض هنگام ورود به vi است. در این حالت، کلیدها به عنوان دستور تفسیر می‌شوند نه متن. برای حرکت، کپی، حذف، جایگزینی و ... از این حالت استفاده می‌شود.

مثال: dd (حذف خط)، yy (کپی خط)، p (چسباندن)

🟩 ۲. Insert Mode (حالت درج)

در این حالت، شما متن را تایپ می‌کنید و وارد می‌شود. برای ورود به این حالت، از کلیدهای i، a، o، I، A، O استفاده می‌شود.

مثال: i (درج قبل از مکان‌نما)، a (درج بعد از مکان‌نما)

🟧 ۳. Ex Mode / Command-Line Mode (حالت خط فرمان)

این حالت با زدن : فعال می‌شود و برای دستورات پیشرفته مانند ذخیره (:w)، خروج (:q)، جستجو و جایگزینی (:%s/old/new/g) استفاده می‌شود.

مثال: :wq (ذخیره و خروج)، :q! (خروج بدون ذخیره)

🟪 ۴. Visual Mode (حالت دیداری) — حالت اضافی

برخی منابع این را حالت چهارم نیز در نظر می‌گیرند. با زدن v در Command Mode وارد این حالت می‌شوید و می‌توانید متن را انتخاب کنید و سپس عملیاتی مانند کپی، حذف یا جایگزینی روی آن انجام دهید.

مثال: v (انتخاب کاراکتر)، V (انتخاب خط)، Ctrl + v (انتخاب ستونی)

▍ شروع کار با vi

برای باز کردن یک فایل با vi، از دستور زیر استفاده می‌شود:

┌──(ya3in㉿kali)-[~] └─$ vi filename.txt

این دستور فایل filename.txt را در ویرایشگر vi باز می‌کند.

پس از ورود به vi، به طور پیش‌فرض در Command Mode هستید. برای شروع تایپ، باید یکی از کلیدهای ورود به Insert Mode را بزنید.

┌──(ya3in㉿kali)-[~] └─$ vi test.txt ~
~
~
~
~
~
~
"test.txt" [New File]
-- INSERT --

پس از باز شدن فایل، با زدن i وارد Insert Mode می‌شوید و می‌توانید متن تایپ کنید. در پایین صفحه -- INSERT -- نمایش داده می‌شود.

┌──(ya3in㉿kali)-[~] └─$ vi test.txt This is a sample text.
This is the second line.
~
~
~
~
~
"test.txt" 2L, 41C written

پس از اتمام تایپ، با زدن Esc از Insert Mode خارج شده و به Command Mode باز می‌گردید. سپس با :wq فایل را ذخیره کرده و خارج می‌شوید.

▍ جدول دستورات پرکاربرد vi/vim (Command Mode)

این جدول بر اساس منبع معتبر Linux Professional Institute تهیه شده است:

کلید توضیح
i درج متن قبل از مکان‌نما
I درج متن قبل از ابتدای خط
a درج متن بعد از مکان‌نما
A درج متن در انتهای خط
o ایجاد خط جدید زیر مکان‌نما و ورود به Insert Mode
O ایجاد خط جدید بالای مکان‌نما و ورود به Insert Mode
dd حذف خط جاری
dw حذف کلمه جاری (از مکان‌نما تا انتهای کلمه)
yy کپی (Yank) خط جاری
yw کپی (Yank) کلمه جاری
p چسباندن متن کپی شده بعد از مکان‌نما
P چسباندن متن کپی شده قبل از مکان‌نما
u Undo (بازگشت به قبل)
Ctrl + r Redo (بازگشت به بعد)
x حذف یک کاراکتر از زیر مکان‌نما
r جایگزینی یک کاراکتر
R ورود به حالت Replace (جایگزینی مداوم)

▍ دستورات Ex Mode (با :)

دستور توضیح
:w ذخیره فایل (Write)
:q خروج (Quit)
:wq ذخیره و خروج
:q! خروج بدون ذخیره (اجباری)
:w! filename ذخیره با نام جدید (بازنویسی اجباری)
:wq filename ذخیره با نام جدید و خروج
:%s/old/new/g جایگزینی همه موارد old با new در کل فایل
:%s/old/new/gc جایگزینی با تأیید (confirm) هر مورد
:set number نمایش شماره خطوط
:set nonumber عدم نمایش شماره خطوط
:set paste فعال‌سازی حالت Paste (برای چسباندن بدون فرمت‌بندی اضافی)
:set nopaste غیرفعال‌سازی حالت Paste
💡 نکات مهم برای امتحان:
  • حالت پیش‌فرض vi: Command Mode است.
  • برای وارد شدن به Insert Mode: از کلیدهای i یا a استفاده کنید.
  • برای خروج از Insert Mode و بازگشت به Command Mode: کلید Esc را بزنید.
  • برای ذخیره و خروج: Esc (برای اطمینان)، سپس :wq و Enter.
  • برای خروج بدون ذخیره: Esc، سپس :q! و Enter.
  • جستجو: در Command Mode، / + متن و Enter.
  • جایگزینی: در Ex Mode، :%s/old/new/g.

▍ خلاصه حالت‌های vi/vim

حالت توضیح ورود خروج
Command دستورات حرکتی، کپی، حذف، جایگزینی پیش‌فرض Esc (اگر در Insert هستید)
Insert تایپ و درج متن i، a، o، I، A، O Esc
Ex / Cmd-Line دستورات پیشرفته (ذخیره، خروج، جستجو، جایگزینی) :، /، ? Enter (اجرا) یا Esc (لغو)
Visual انتخاب متن برای کپی/حذف v، V، Ctrl + v Esc

▍ جمع‌بندی سریع